﻿/*Author: HUNGDV*/
/*Viết theo Object Oriented Programming - OOP*/
///Lấy danh sách control của lưới theo loại
function GetControlByType(type, prefix) {
    var element;
    var arrControl = new Array();
    for (var i = 0; i < document.forms[0].elements.length; i++) {
        element = document.forms[0].elements[i];
        if (element.type == type && element.id.indexOf(prefix) >= 0) {
            arrControl[arrControl.length] = element;
        }
    }
    return arrControl;
}

/*Chứa hàm xử lý cho luới*/
function Grid() {
    /*Kiểm tra đã check chọn trên lưới chưa*/
    this.CheckRowSelected = function (gridName) {
        if ($find(gridName).get_selectedItems().length < 1) {
            return false;
        }
        else return true;
    }

    /* Kiểm tra check chọn trên lưới dành cho phân quyền*/
    this.CheckRowSelectedPemission = function (gridName) {
        var selectedRows = $find(gridName).get_selectedItems();
        var notDeleteRow = 0;
        var allRows = selectedRows.length;
        for (var i = 0; i < allRows; i++) {
            var columncell = selectedRows[i].get_cell("ClientSelectColumn");
            var selectrCheckBox = columncell.getElementsByTagName("input");
            if (selectrCheckBox[0] == null) {
                notDeleteRow = notDeleteRow + 1;
            }
        }
        if (notDeleteRow < allRows) {
            return true;
        }
        else
            return false;
    }

    //Hàm xử lý sự kiện click checkbox trên header của mỗi cột 
    //chkSender: Object checkbox all
    this.OnHeaderCheckedChanged = function (gridClientId, chkSender, chkTargetServerId) {
        if (chkSender == null) return;
        if (chkTargetServerId == null || chkTargetServerId == "") return;

        var arrControl = new Grid().GetControlByType("checkbox", gridClientId);
        for (var i = 0; i < arrControl.length; i++) {
            if (arrControl[i].id.indexOf(chkTargetServerId) >= 0 && arrControl[i].disabled == false)
                arrControl[i].checked = chkSender.checked;
        }
    }
    //Hàm xủ lý sự kiện click checkbox trên mỗi hàng
    //Nếu chkSender.Checked=true set giá trị cho targetServerId
    //updateTarget:Update giá trị khi chkSender.Checked=false hay không?
    //updateTarget=null or updateTarget=false: Không update giá trị target
    this.OnItemCheckedChanged = function (chkSender, senderServerId, targetServerId, updateTarget) {
        if (targetServerId == null || targetServerId == "") return;
        if (chkSender != null) {
            //Nếu sender.checked=true luôn update, or updateTarget=true luôn update
            if (chkSender.checked || updateTarget == true) {
                var targetClientId = chkSender.id.replace(senderServerId, targetServerId);
                var chkTarget = document.getElementById(targetClientId);
                if (chkTarget != null && chkTarget.type == 'checkbox' && chkTarget.disabled == false) {
                    chkTarget.checked = chkSender.checked;
                }
            }
        }
    }


    /*Ghi nhận sự thay đổi dữ lệu trên một hàng*/
    /*sender_ServerId: Server Id của control thay đổi dữ liệu*/
    /*chkChanged_ServerId: Server id của check box ghi nhận sự thay đổi*/
    ///Chỉ áp dụng cho control ghi nhận sự thay đổi là checkbox
    this.RowTrackChanged = function (sender_ClientID, sender_ServerId, chkChanged_ServerId) {
        if (chkChanged_ServerId == null || chkChanged_ServerId == "") return;
        if (sender_ClientID != null) {
            var ctrlTargetId = sender_ClientID.replace(sender_ServerId, chkChanged_ServerId);
            var ctrlTarget = document.getElementById(ctrlTargetId);
            if (ctrlTarget != null && ctrlTarget.type != null)
                ctrlTarget.checked = true;

        }
    }

    ///Kiểm tra nếu có ít nhất 1 hàng thay đổi --> Return true;
    ///Chỉ áp dụng cho control ghi nhận sự thay đổi là checkbox
    this.GridChanged = function (grid_ClientId, chkChanged_ServerId) {
        if (grid_ClientId != null) {
            var arrControl = new Grid().GetControlByType("checkbox", grid_ClientId);
            for (var i = 0; i < arrControl.length; i++) {
                if (arrControl[i].id.indexOf(chkChanged_ServerId) >= 0 && arrControl[i].checked)
                    return true;
            }
        }
        return false;
    }
    ///Lấy danh sách control của lưới theo loại
    this.GetControlByType = function (type, prefix) {

        var selectedCount = 0;
        var element;
        var arrControl = new Array();
        for (var i = 0; i < document.forms[0].elements.length; i++) {
            element = document.forms[0].elements[i];
            if (element.type == type && element.id.indexOf(prefix) >= 0) {
                arrControl[arrControl.length] = element;
            }
        }
        return arrControl;

    }
    ///Hiển thị trạng thái của Filter theo Cookie
    this.setFilterStatus = function () {
        var radGridFilter = new ControlFinder().getControlByCssClass("rgFilterRow");
        var disValue = new Cookie().getCookie("rgFilterRow_Status");
        if (disValue == null || disValue == '') disValue = "none";

        for (var i = 0; i < radGridFilter.length; i++) {
            radGridFilter[i].style.display = disValue;
        }

    }
    // xử lý sự kiện nhấn enter thì gọi hàm tìm kiếm
    this.KeypreessEnter = function (sender, event) {
        var keyPressed;
        if (window.event)
            keyPressed = window.event.keyCode; // IE
        else
            keyPressed = event.which; // Firefox
        if (keyPressed == 13) {
            var btnsearch = new ControlFinder().getControlByCssClass("btnFind"); //Chỉ sử dụng được khi CSS class cua button Search la btnFind
            if (btnsearch[0] != null)
                btnsearch[0].focus();
            btnsearch[0].click();
        }
    }
}

///Các hàm xử lý sự kiện người dùng click các checkbox quyền: Xem, Xóa, Sửa, Tất cả
function CheckBoxPermission() {
    //Click checkbox tất cả
    this.OnAllChanged = function (sender, senderServerId, viewServerId, editServerId, delServerId, changeId) {

        var chkView = document.getElementById(sender.id.replace(senderServerId, viewServerId));
        if (chkView.disabled == false) chkView.checked = sender.checked;

        var chkEdit = document.getElementById(sender.id.replace(senderServerId, editServerId));
        if (chkEdit.disabled == false) chkEdit.checked = sender.checked;

        var chkDel = document.getElementById(sender.id.replace(senderServerId, delServerId));
        if (chkDel.disabled == false) chkDel.checked = sender.checked;

        if (changeId != null) {
            var chkChanged = document.getElementById(sender.id.replace(senderServerId, changeId));
            if (chkChanged != null) chkChanged.checked = true;
        }
    }
    //Click checkbox Xóa, Sửa --> Phải có quyền Xem
    this.OnEditDelChanged = function (sender, senderServerId, viewServerId, changeId, allServerId) {

        if (sender.checked) {
            var chkView = document.getElementById(sender.id.replace(senderServerId, viewServerId));
            if (chkView.disabled == false) chkView.checked = true;
        }
        else if (allServerId != null) {
            var chkAll = document.getElementById(sender.id.replace(senderServerId, allServerId));
            chkAll.checked = false;
        }
        if (changeId != null) {
            var chkChanged = document.getElementById(sender.id.replace(senderServerId, changeId));
            if (chkChanged != null) chkChanged.checked = true;
        }
    }
    //Click check Xem: --> Nếu value=false --> Không có quyền nào
    this.OnViewChanged = function (sender, senderServerId, editServerId, delServerId, allServerId, changeId) {
        if (sender.checked == false) {
            var chkAll = document.getElementById(sender.id.replace(senderServerId, allServerId));
            if (chkAll.disabled == false) chkAll.checked = false;

            var chkEdit = document.getElementById(sender.id.replace(senderServerId, editServerId));
            if (chkEdit.disabled == false) chkEdit.checked = false;

            var chkDel = document.getElementById(sender.id.replace(senderServerId, delServerId));
            if (chkDel.disabled == false) chkDel.checked = false;
        }
        else if (allServerId != null) {
            var chkAll = document.getElementById(sender.id.replace(senderServerId, allServerId));
            chkAll.checked = false;
        }
        if (changeId != null) {
            var chkChanged = document.getElementById(sender.id.replace(senderServerId, changeId));
            if (chkChanged != null) chkChanged.checked = true;
        }
    }
}

/*Các hàm xủ lý sự kiện click các checkbox quyền trên lưới: Xem, xóa, sửa , Tất cả  
chkTrackChangedId: ServerId của checkbox ghi nhận thay đổi
gridClientId: Client Id của lưới cần làm việc    
*/
function CheckUncheckPermission(gridClientId, chkTrackChangedServerId,
    chkHeaderViewId, chkHeaderEditId, chkHeaderDelId, chkHeaderAllId,
    chkItemViewId, chkItemEditId, chkItemDelId, chkItemAllId
) {
    this.functionGridId = gridClientId;
    this.chkTrackChangedId = chkTrackChangedServerId;

    //Click checkbox ở header của cột 'Xem'
    this.OnHeaderViewChanged = function (sender) {
        //Set checked của các checkbox       
        var grid = new Grid();
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemViewId);
        if (sender.checked == false) {
            //Nếu checkView không được chọn --> Không có quyền khác
            grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemEditId);
            grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemDelId);
            grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemAllId);
        }
        //ghi nhận thay đổi        
        this.UpdateTrackChanged(sender);
    }

    //Click checkbox ở header của cột 'Sửa', 'Xóa'            
    //Nếu giá trị Header=true --> Gán giá trị cho tất cả các hàng của cột 'Xem'=true, ngược lại không gán
    this.OnHeaderEditDeleteChanged = function (sender, targetId) {
        var grid = new Grid();
        //Cập nhật trạng thái cột hiện tại
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, targetId);
        if (sender.checked) {
            //Cập nhật trạng thái cho cột View
            grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemViewId);
        }
        else {
            //Không còn chọn tất cả nữa
            grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemAllId);
        }
        //ghi nhận thay đổi
        this.UpdateTrackChanged(sender);
    }

    //Click checkbox ở header của cột 'Tất cả'
    this.OnHeaderAllChanged = function (sender) {
        var grid = new Grid();
        //Set giá trị ở tất cả các cột View, Edit, Del  bằng giá trị cột All
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemAllId);
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemViewId);
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemEditId);
        grid.OnHeaderCheckedChanged(this.functionGridId, sender, chkItemDelId);
        //ghi nhận thay đổi
        this.UpdateTrackChanged(sender);
    }


    //Click checkbox ở mỗi hàng của cột 'Sủa', 'Xóa'
    this.OnItemEditDeleteChanged = function (sender, senderServerId) {
        var grid = new Grid();
        grid.OnItemCheckedChanged(sender, senderServerId, chkItemViewId);
        if (sender.checked)
            grid.OnItemCheckedChanged(sender, senderServerId, chkItemViewId, true)
        else {//CheckAll =false
            grid.OnItemCheckedChanged(sender, senderServerId, chkItemAllId, true);
        }
        //ghi nhận thay đổi
        if (this.chkTrackChangedId != null && this.chkTrackChangedId != "") {
            grid.RowTrackChanged(sender.id, senderServerId, this.chkTrackChangedId);
        }

    }
    //Click checkbox ở mỗi hàng của cột 'Tất cả'
    this.OnItemAllChanged = function (sender) {
        var grid = new Grid();
        //Set giá trị ở tất cả các cột View, Edit, Del trong cùng hàng bằng giá trị cột All
        grid.OnItemCheckedChanged(sender, chkItemAllId, chkItemViewId, true);
        grid.OnItemCheckedChanged(sender, chkItemAllId, chkItemEditId, true);
        grid.OnItemCheckedChanged(sender, chkItemAllId, chkItemDelId, true);
        //ghi nhận thay đổi

        if (this.chkTrackChangedId != null && this.chkTrackChangedId != "") {
            grid.RowTrackChanged(sender.id, chkItemAllId, this.chkTrackChangedId);

        }

    }
    //Click checkbox ở mỗi hàng của cột 'Tất cả'
    this.OnItemViewChanged = function (sender) {
        var grid = new Grid();
        //Set giá trị ở tất cả các cột All, Edit, Del trong cùng hàng bằng giá trị cột View
        if (sender.checked == false) {
            grid.OnItemCheckedChanged(sender, chkItemViewId, chkItemAllId, true);
            grid.OnItemCheckedChanged(sender, chkItemViewId, chkItemEditId, true);
            grid.OnItemCheckedChanged(sender, chkItemViewId, chkItemDelId, true);
        }
        //ghi nhận thay đổi
        if (this.chkTrackChangedId != null && this.chkTrackChangedId != "") {
            grid.RowTrackChanged(sender.id, chkItemViewId, this.chkTrackChangedId);
        }

    }
    //Lưu trữ trạng thái thay đổi dữ liệu ở tất cả các hàng
    this.UpdateTrackChanged = function (chkSender) {
        if (chkSender == null) return;
        if (this.chkTrackChangedId == null || this.chkTrackChangedId == "") return;

        var arrControl = new Grid().GetControlByType("checkbox", this.functionGridId);
        for (var i = 0; i < arrControl.length; i++) {
            if (arrControl[i].id.indexOf(this.chkTrackChangedId) >= 0)
                arrControl[i].checked = true;
        }
    }

}

/*chứa các hàm xử lý xuất câu thông báo*/
function Message() {

    this.windowWidth = 330;
    this.windowHeight = 100;
    this.windowTitle = "Alert";

    /*Hiển thị thông báo theo message và title*/
    this.Show = function (message, wTitle, width, height) {
        if (width != null) this.windowWidth = width;
        if (height != null) this.windowHeight = height;
        if (wTitle != null) this.windowTitle = wTitle;

        radalert(message, this.windowWidth, this.windowHeight, this.windowTitle);
    }
    /*Hiển thị thông báo theo JSON Object*/
    this.ShowObject = function (objMessage, width, height) {
        if (objMessage == null) return;
        if (width != null) this.windowWidth = width;
        if (height != null) this.windowHeight = height;
        if (objMessage.title != null) this.windowTitle = objMessage.title;

        radalert(objMessage.message, this.windowWidth, this.windowHeight, this.windowTitle);
    }


}




/*Quản lý popup*/
function PopUpManager() {
    this.windowWidth = 850;
    this.windowHeight = 550;

    /*Mở Popup fullscreen*/
    this.OpenMaximize = function (url) {
        var oWnd = radopen(url, null);
        oWnd.setActive(true);
        oWnd.maximize();
    }
    /*Mở Popup kích thước mặc định*/
    this.Open = function (url) {
        var oWnd = radopen(url, null);
        oWnd.set_width(this.windowWidth);
        oWnd.set_height(this.windowHeight);
        oWnd.center();
        oWnd.setActive(true);
    }
    /*Mở popup kich thước do người dùng tự định nghĩa*/
    this.OpenManual = function (url, width, height) {
        var oWnd = radopen(url, null);
        oWnd.set_width(width);
        oWnd.set_height(height);
        oWnd.center();
        oWnd.setActive(true);
    }
}



/*Ẩn hiện một vùng chứa các control
Ghi lại trạng thái để set lại khi có Page_Load
hdfStatusId: ClientID của control ghi trạng thái, tốt nhất là Textbox
divId: Vùng div cần ẩn hiện
*/
function CollapseExpand(btnExpandId, btnCollapseId, divId, hdfStatusId) {

    this.btnExpand = document.getElementById(btnExpandId);
    this.btnCollapse = document.getElementById(btnCollapseId);
    this.divControl = document.getElementById(divId);
    this.statusControlId = hdfStatusId;

    /*Khi trang được khởi tạo*/
    this.onInit = function () {
        if (document.getElementById(this.statusControlId).value == '0') this.hideAdvance('0');
        else this.showAdvance('0');
    }
    this.hideAdvance = function (changeStatus) {
        //an vung search nang cao
        this.divControl.style.display = "none";
        this.btnExpand.style.display = "block";
        this.btnCollapse.style.display = "none";
        //neu co yeu cau thay doi trang thai-->set lai trnag thai la dang an
        if (changeStatus == null || changeStatus == "1") document.getElementById(this.statusControlId).value = "0";

    }
    this.showAdvance = function (changeStatus) {
        //hien vung search nang cao
        this.divControl.style.display = "block";
        this.btnCollapse.style.display = "block";
        this.btnExpand.style.display = "none";
        //neu co yeu cau thay doi trang thai-->set lai trnag thai dang hien thi
        if (changeStatus == null || changeStatus == "1") document.getElementById(this.statusControlId).value = "1";

    }
}





/*Hàm liên quan tới truy xuất, ghi giá trị vào cookie*/
function Cookie() {
    /*Lưu giá trị vào Cookie
    expiredays: Số ngày mà giá trị đó hết hiệu lực*/
    this.setCookie = function (c_name, value, expiredays) {
        if (expiredays == null) expiredays = 1;
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + expiredays);
        document.cookie = c_name + "=" + escape(value) +
        ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
    }
    /*Lấy giá trị ở cookie*/
    this.getCookie = function (c_name) {
        if (document.cookie.length > 0) {
            c_start = document.cookie.indexOf(c_name + "=");
            if (c_start != -1) {
                c_start = c_start + c_name.length + 1;
                c_end = document.cookie.indexOf(";", c_start);
                if (c_end == -1) c_end = document.cookie.length;
                return unescape(document.cookie.substring(c_start, c_end));
            }
        }
        return "";
    }
}



/*
Thiết lập trạng thái cho Master Spliter
Lưu trữ trạng thái ẩn hiện các vùng(LeftMenu, Top, Bottom) của form vào Cookie
Hiển thị lại form khi Page_load
*/
function MasterSplitter() {
    this.cokieExpire = 7;
    this.OnTopClientLoad = function (sender, args) {
        new MasterSplitter().SetTopPanelStatus(sender);
    }
    this.OnLeftClientLoad = function (sender, args) {
        new MasterSplitter().SetLeftPanelStatus(sender);
    }
    this.SetPreviousWidth = function (sender, args) {
        var size = new Cookie().getCookie("Master_LeftSize");
        if (size == null || size == '') return;
        else pane.set_width(parseInt(size));

    }
    this.SetTopPanelStatus = function (sender) {
        var pane = sender.getPaneById("ctl00_pnlTop");
        if (!pane) return;
        var collapsed = new Cookie().getCookie("Master_TopCollapse");
        if (collapsed == "" || collapsed == null) collapsed = "0";
        if (collapsed == "0") pane.expand();
        else pane.collapse();

    }
    this.SetLeftPanelStatus = function (sender) {
        var pane = sender.getPaneById("ctl00_RadPanelMenu");
        if (!pane) return;
        var collapsed = new Cookie().getCookie("Master_LeftCollapse");
        if (collapsed == "" || collapsed == null) collapsed = "0";
        if (collapsed == "0") pane.expand();
        else pane.collapse();

    }
    this.OnTopPanelCollapsed = function (sender, args) {
        new Cookie().setCookie("Master_TopCollapse", "1", this.cokieExpire);

    }
    this.OnTopPanelExpanded = function (sender, args) {
        new Cookie().setCookie("Master_TopCollapse", "0", this.cokieExpire);

    }
    this.OnLeftPanelCollapsed = function (sender, args) {
        new Cookie().setCookie("Master_LeftCollapse", "1", this.cokieExpire);

    }
    this.OnLeftPanelExpanded = function (sender, args) {
        new Cookie().setCookie("Master_LeftCollapse", "0", this.cokieExpire);
    }
    this.OnLeftPanelResized = function (sender, args) {
        new Cookie().setCookie("Master_LeftSize", sender.get_width().toString(), this.cokieExpire);
    }
}

/*Sử dụng cho RadComboValueValidator
Kiểm tra giá trị người dùng nhập vào có hợp lệ hay không
Chỉ riêng với các RadComboBox sử dụng LoadOnDemain mới cần sử dụng, 
ngược lại không cần sử dụng RadComboValueValidator
*/
function RadComboValueValidator(controlName) {
    this.ClientValidate = function (source, args) {
        var combo = $find(controlName);
        var text = combo.get_text();
        var value = combo.get_value();
        if (value != null && value.length > 0) {
            args.IsValid = true;
            return true;
        }
        if (text.length < 1) {
            args.IsValid = false;
            return false;
        }
        else {
            var node = combo.findItemByText(text);
            if (node) {
                var value = node.get_value();
                if (value.length > 0) {
                    args.IsValid = true;
                    return true;
                }
            }
            else {
                args.IsValid = false;
                return false;
            }
        }
    }
}

/*
1. Xóa các giá trị không hợp lệ cho RadComboBox sử dụng LoadOnDemain=true
, nếu không sử dụng LoadOnDemain=true không cần dùng hàm này 
vì cơ chế của RadCombo tự làm được trong trường hợp này 
2. Chỉ chạy đúng với các Combo sử dụng AutoPostback=true, 
ngược lại chưa xử lý được
*/
function RadComboBox_OnClientBlur(sender, args) {
    if (sender.get_text() != "") {
        var text = sender.get_text();
        var value = sender.get_value();
        //Nếu value hợp lệ
        if (value != null && value.length > 0) {
            return true;
        }
        //Nếu không nhập giá trị
        else if (text.length < 1) {
            return false;
        }
        else {
            var node = sender.findItemByText(text);
            if (node) {
                return true;
            }
            else {
                sender.trackChanges();
                sender.set_text("");
                sender.set_value("");
                sender.commitChanges();
                return false;
            }
        }
    }
    return true;

}

//Sử dụng cho việc LoadCheckbox vào RadCombo
function CheckBoxInRadCombo(cboId, hdfValueHolder) {
    //Không cho phép click chọn mỗi Item --> Bắt buộc click vào check box
    this.OnClick = function (obj, e) {
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
        e.cancelBubble = true;
        if (e.stopPropagation) {
            e.stopPropagation();
        }
    }
    ///Khi có yêu cầu thay đổi Index --> Build lại value
    this.OnClientSelectedIndexChanging = function (sender, args) {
        args.set_cancel(true);
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
    }
    ///Khi Combo load giá trị tại client
    this.OnClientLoad = function (sender, args) {
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
    }
    ///Đóng DropDown
    this.OnClientDropDownClosing = function (sender, args) {
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();


    }
    //Rời Focus ra khỏi combo
    this.OnClientBlur = function (sender, args) {
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
    }
    //Sử lý trường hợp click chọn tất cả
    this.SelectAll = function () {

        var checkboxes = GetControlByType("checkbox", cboId);
        if (checkboxes == null) return;

        for (var i = 0; i < checkboxes.length; i++)
            checkboxes[i].checked = true;
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
    }
    ///Bỏ chọn tất cả
    this.DeselectAll = function () {
        var checkboxes = GetControlByType("checkbox", cboId);
        if (checkboxes == null) return;
        for (var i = 0; i < checkboxes.length; i++)
            checkboxes[i].checked = false;
        new CheckBoxInRadCombo(cboId, hdfValueHolder).ShowSelectedItem();
    }
    ///Tìm kiếm giá trị được chọn --> Hiển thị lên Combo
    this.ShowSelectedItem = function () {
        var combo = $find(cboId);
        var hdfValue = document.getElementById(hdfValueHolder);

        var comboItems = combo.get_items();
        var text = "";
        var value = "";
        for (var i = 0; i < comboItems.get_count(); i++) {
            var item = comboItems.getItem(i);
            var checkboxes = GetControlByType("checkbox", cboId + "_i" + i.toString());
            if (checkboxes != null && checkboxes.length > 0) {
                if (checkboxes[0].checked) {
                    if (text != "") text = text + "; ";
                    text = text + item.get_text();

                    if (value != "") value += ";";
                    value = value + item.get_value();
                }
            }
        }
        hdfValue.value = value;

        combo.trackChanges();
        combo.set_text(text);
        combo.set_value(value);
        combo.commitChanges();

    }
}

//Sử dụng cho việc LoadCheckbox vào RadCombo in Grid
function CheckBoxInRadCombo_Grid(hdfValueHolder) {
    var cboId = null;
    //Không cho phép click chọn mỗi Item --> Bắt buộc click vào check box
    this.OnClick = function (obj, e) {
        if (cboId != null) {
            new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(cboId);
            e.cancelBubble = true;
            if (e.stopPropagation) {
                e.stopPropagation();
            }
        }
    }

    this.DropDownOpenHandler = function (obj, e) {
        cboId = obj;
    }

    ///Khi có yêu cầu thay đổi Index --> Build lại value
    this.OnClientSelectedIndexChanging = function (sender, args) {
        args.set_cancel(true);
        new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(sender);
    }
    ///Khi Combo load giá trị tại client
    this.OnClientLoad = function (sender, args) {
        new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(sender);
    }
    ///Đóng DropDown
    this.OnClientDropDownClosing = function (sender, args) {
        new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(sender);

    }
    //Rời Focus ra khỏi combo
    this.OnClientBlur = function (sender, args) {
        new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(sender);
    }
    //Sử lý trường hợp click chọn tất cả
    this.SelectAll = function () {
        if (cboId != null) {
            var checkboxes = GetControlByType("checkbox", cboId.get_id());
            if (checkboxes == null) return;

            for (var i = 0; i < checkboxes.length; i++)
                checkboxes[i].checked = true;
            new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(cboId);
        }
    }
    ///Bỏ chọn tất cả
    this.DeselectAll = function () {
        if (cboId != null) {
            var checkboxes = GetControlByType("checkbox", cboId.get_id());
            if (checkboxes == null) return;
            for (var i = 0; i < checkboxes.length; i++)
                checkboxes[i].checked = false;
            new CheckBoxInRadCombo_Grid(hdfValueHolder).ShowSelectedItem(cboId);
        }
    }
    ///Tìm kiếm giá trị được chọn --> Hiển thị lên Combo
    this.ShowSelectedItem = function (sender) {
        if (sender != null) {
            var combo = sender;

            var comboItems = combo.get_items();
            var text = "";
            var value = "";
            for (var i = 0; i < comboItems.get_count(); i++) {
                var item = comboItems.getItem(i);
                var checkboxes = GetControlByType("checkbox", combo.get_id() + "_i" + i.toString());
                if (checkboxes != null && checkboxes.length > 0) {
                    if (checkboxes[0].checked) {
                        if (text != "") text = text + "; ";
                        text = text + item.get_text();

                        if (value != "") value += ";";
                        value = value + item.get_value();
                    }
                }
            }

            combo.trackChanges();
            combo.set_text(text);
            combo.set_value(value);
            combo.commitChanges();
        }
    }
}

//TreeViewInRadCombo/
//Sủ dụng khi load TreeView trong combo box
function TreeViewInRadCombo(comboClientId, treeServerId) {

    this.noneItemClick = function () {
        var comboBox = $find(comboClientId);
        comboBox.trackChanges();
        comboBox.get_items().getItem(0).set_text("");
        comboBox.get_items().getItem(0).set_value("");
        comboBox.get_items().getItem(0).select();
        comboBox.commitChanges();
        comboBox.hideDropDown();
    }
    /*Click 1 node trên cây*/
    this.nodeClicking = function (sender, args) {
        var comboBox = $find(comboClientId);

        var node = args.get_node();
        var fullText = new TreeViewInRadCombo(comboClientId, treeServerId).GetFullPath(node);
        //Remove whitespace
        fullText = fullText.replace(/&nbsp;/g, "");

        comboBox.set_text(fullText);
        comboBox.set_value(node.get_value());

        comboBox.trackChanges();
        comboBox.get_items().getItem(0).set_text(fullText);
        comboBox.get_items().getItem(0).set_value(node.get_value());
        comboBox.get_items().getItem(0).select();
        comboBox.commitChanges();

        comboBox.hideDropDown();
    }

    this.StopPropagation = function (e) {
        if (!e) {
            e = window.event;
        }

        e.cancelBubble = true;
    }
    /*xử lý sự kiện DropDown open*/
    this.OnClientDropDownOpenedHandler = function (sender, eventArgs) {
        var tree = sender.get_items().getItem(0).findControl(treeServerId);
        if (tree != null) {
            var selectedNode = tree.get_selectedNode();
            if (selectedNode) {
                selectedNode.scrollIntoView();
            }
        }
    }
    /*Lấy tên của node từ root--> Node hiện tại*/
    this.GetFullPath = function (node) {
        var fullPath = node.get_text();
        var currentObject = node.get_parent();
        while (currentObject != null) {
            // get_parent() will return null when we reach the treeview
            if (currentObject.get_parent() != null) {
                fullPath = currentObject.get_text() + "->" + fullPath;
            }
            currentObject = currentObject.get_parent();
        }
        return fullPath;
    }
}

//TreeViewInRadCombo/
//Sủ dụng khi load TreeView trong combo box
//Sử dụng cho combo trên lưới
function TreeViewInRadCombo_Grid(treeServerId) {
    var combomain = null;
    var treeview = null;
    this.noneItemClick = function () {
        if (combomain != null) {
            combomain.trackChanges();
            combomain.get_items().getItem(0).set_text("");
            combomain.get_items().getItem(0).set_value("");
            combomain.get_items().getItem(0).select();
            combomain.commitChanges();
            combomain.hideDropDown();
        }
    }
    /*Click 1 node trên cây*/
    this.nodeClicking = function (sender, args) {
        var combo = $find(sender.get_id().replace('_i0_' + treeServerId, ''));
        var node = args.get_node();
        var fullText = new TreeViewInRadCombo(treeServerId).GetFullPath(node);
        //Remove whitespace
        fullText = fullText.replace(/&nbsp;/g, "");

        combo.set_text(fullText);
        combo.set_value(node.get_value());

        combo.trackChanges();
        combo.get_items().getItem(0).set_text(fullText);
        combo.get_items().getItem(0).set_value(node.get_value());
        combo.get_items().getItem(0).select();
        combo.commitChanges();

        combo.hideDropDown();
    }

    this.StopPropagation = function (e) {
        if (!e) {
            e = window.event;
        }

        e.cancelBubble = true;
    }
    /*xử lý sự kiện DropDown open*/
    this.OnClientDropDownOpenedHandler = function (sender, eventArgs) {
        var tree = sender.get_items().getItem(0).findControl(treeServerId);
        combomain = sender;
        treeview = tree;
        if (tree != null) {
            var selectedNode = tree.get_selectedNode();
            if (selectedNode) {
                selectedNode.scrollIntoView();
            }
        }
    }
    /*Lấy tên của node từ root--> Node hiện tại*/
    this.GetFullPath = function (node) {
        var fullPath = node.get_text();
        var currentObject = node.get_parent();
        while (currentObject != null) {
            // get_parent() will return null when we reach the treeview
            if (currentObject.get_parent() != null) {
                fullPath = currentObject.get_text() + "->" + fullPath;
            }
            currentObject = currentObject.get_parent();
        }
        return fullPath;
    }

    this.treeExpandAllNodes = function () {
        if (treeview != null) {
            var nodes = treeview.get_allNodes();

            for (var i = 0; i < nodes.length; i++) {
                if (nodes[i].get_nodes() != null) {
                    nodes[i].expand();
                }
            }
        }
    }

    this.treeCollapseAllNodes = function () {
        if (treeview != null) {
            var nodes = treeview.get_allNodes();

            for (var i = 0; i < nodes.length; i++) {
                if (nodes[i].get_nodes() != null) {
                    nodes[i].collapse();
                }
            }
        }
    }
}


//Thu nhỏ / mở rộng cây
function TreeExpandCollapse(clientId) {
    this.treeExpandAllNodes = function () {
        var treeView = $find(clientId);
        var nodes = treeView.get_allNodes();

        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].get_nodes() != null) {
                nodes[i].expand();
            }
        }
    }

    this.treeCollapseAllNodes = function () {
        var treeView = $find(clientId);
        var nodes = treeView.get_allNodes();

        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].get_nodes() != null) {
                nodes[i].collapse();
            }
        }
    }
}

//Thu nhỏ / mở rộng cây và ẩn nút thu nhỏ,mở rộng
function TreeExpandCollapse_HideButton(clientId, btnexpandid, btncollapseid) {
    this.treeExpandAllNodes = function () {
        var treeView = $find(clientId);
        var btnexpand = document.getElementById(btnexpandid);
        var btncollapse = document.getElementById(btncollapseid);
        btnexpand.disabled = true;
        btncollapse.disabled = false;
        var nodes = treeView.get_allNodes();

        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].get_nodes() != null) {
                nodes[i].expand();
            }
        }

    }

    this.treeCollapseAllNodes = function () {
        var treeView = $find(clientId);
        var btnexpand = document.getElementById(btnexpandid);
        var btncollapse = document.getElementById(btncollapseid);
        btnexpand.disabled = false;
        btncollapse.disabled = true;
        var nodes = treeView.get_allNodes();

        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].get_nodes() != null) {
                nodes[i].collapse();
            }
        }
    }

    this.treeNodeCollapse = function (sender, args) {
        var btnexpand = document.getElementById(btnexpandid);
        if (btnexpand.disabled == true)
            btnexpand.disabled = false;
    }

    this.treeNodeExpand = function (sender, args) {
        var btncollapse = document.getElementById(btncollapseid);
        if (btncollapse.disabled == true)
            btncollapse.disabled = false;
    }
}

//Quản lý Window (Popup)
function WindowManager() {
    this.GetRadWindow = function () {
        var oWindow = null;
        if (window.radWindow) oWindow = window.radWindow; //Will work in Moz in all cases, including clasic dialog
        else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; //IE (and Moz as well)
        return oWindow;
    }
}

//TabStrip
//Các hàm xử lý sự kiện --> Thay đổi Tab và confirm việc lưu trữ dữ liệu
function RadTabClientSide() {
    //Xử lý khi thay đổi Tab
    //Trả về kết quả có chuyển Tab hay không
    this.ProcessOnTabSelecting = function (gridClientId, trackServerId, btnSaveClientId, args, message) {
        //Kiểm tra sự thay đổi dữ liệu
        var dataChanged = new Grid().GridChanged(gridClientId, trackServerId);
        //Nếu không có thay đổi dữ liệu trên form --> Chuyển tab
        if (dataChanged == false) return true;

        //Ngược lại: Xác nhân thao tác 
        var isSave = confirm(message);
        if (isSave) {
            //Không thay đổi trạng thái của form
            args.set_cancel(true);
            //Thực hiện thao tác lưu dữ liệu
            var btnSave = document.getElementById(btnSaveClientId);
            btnSave.click();
            return false;
        }
        return true;
    }
}
//Các hàm liên quan tới ngày tháng năm
function MonthYearChecker() {
    //Kiểm tra tháng/năm nhỏ hơn tháng năm hiện tại không?
    //True: Nếu value<=now, false:>Now, sai định dạng, value=null,...
    //Định dạng value: MM/yyyy
    this.MonthYearLessThanEqualNow = function (value) {

        if (value == null) return false;
        var arr = value.split("/");

        if (arr == null || arr.length < 2) return false;
        var iYear = eval(arr[1]);
        var iMonth = eval(arr[0]);

        var today = new Date();

        if (iYear < today.getFullYear()) return true;
        //getMonth return from 0 to 11
        else if (iYear == today.getFullYear() && iMonth <= today.getMonth() + 1) return true;
        else return false;
    }
    // Kiểm tra date 1 có bé hơn or bằng date 2
    //true: nếu DateValue1 <= DateValue2
    //false: nếu DateValue1 > DateValue2
    //định dạng DateValue1: dd/MM/yyyy
    //định dạng DateValue2: MM/yyyy
    this.IsDateLess = function (DateValue1, DateValue2) {
        if (DateValue2 == null) return false;
        var arr1 = DateValue2.split("/");
        if (arr1 == null || arr1.length < 2) return false;
        var iYear1 = eval(arr1[1]);
        var iMonth1 = eval(arr1[0]);
        var vdate1 = iMonth1.toString() + '/' + '01/' + iYear1.toString();
        var DaysDiff;
        Date1 = new Date(DateValue1);
        Date2 = new Date(vdate1);
        DaysDiff = Math.floor((Date1.getTime() - Date2.getTime()) / (1000 * 60 * 60 * 24));
        //alert("DaysDiff ="+DaysDiff);
        if (DaysDiff <= 0)
            return true;
        else
            return false;
    }
    //Kiểm tra tháng/năm lớn hơn tháng năm khác không?
    //True: Nếu value1<=value1, false:>Now, sai định dạng, value=null,...
    //Định dạng value1: MM/yyyy
    //Định dạng value2: MM/yyyy
    this.MonthYearMoreThanEqualMonthYear = function (value1, value2) {

        if (value1 == null || value2 == null) return false;
        var arr1 = value1.split("/");
        var arr2 = value2.split("/");

        if (arr1 == null || arr1.length < 2) return false;
        if (arr2 == null || arr2.length < 2) return false;
        var iYear1 = eval(arr1[1]);
        var iMonth1 = eval(arr1[0]);

        var iYear2 = eval(arr2[1]);
        var iMonth2 = eval(arr2[0]);

        if (iYear2 > iYear1) return true;
        else if (iYear1 == iYear2 && iMonth2 >= iMonth1) return true;
        else return false;
    }

    //Kiểm tra năm nhỏ hơn năm hiện tại không => Kiểm Tra Năm Sinh?
    //True: Nếu value<=now, false:>Now
    //Định dạng value: yyyy
    this.YearLessThanEqualNow = function (value) {

        var arr = value;

        var iYear = parseInt(arr);

        var today = new Date();

        if (iYear < today.getFullYear()) return true;
        else if (iYear == today.getFullYear()) return true;
        else return false;
    }

    this.CheckMonthYear = function (field) {
        var checkstr = "0123456789";
        var DateField = field;
        var Datevalue = "";
        var DateTemp = "";
        var seperator = "/";
        var month;
        var year;
        var leap = 0;
        var err = 0;
        var i;
        err = 0;
        DateValue = DateField.value;

        if (DateValue == "") return;

        /* Delete all chars except 0..9 */
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;
        /* Always change date to 6 digits - string*/
        /* if year is entered as 2-digit / always assume 20xx */
        if (DateValue.length == 4) {
            DateValue = DateValue.substr(0, 2) + '20' + DateValue.substr(2, 2);
        }

        if (DateValue.length != 6) {
            err = 19;
        }
        /* year is wrong if year = 0000 */
        year = DateValue.substr(2, 4);

        if (year == 0 || year < 1900) {
            err = 20;
        }
        /* year is wrong if year = 9999 & year>9999 */
        if (year == 9999 || year > 9999) {
            err = 22;
        }

        /* Validation of month*/
        month = DateValue.substr(0, 2);
        if ((month < 1) || (month > 12)) {
            err = 21;
        }

        /* if 00 ist entered, no error, deleting the entry */
        if ((month == 0) && (year == 00)) {
            err = 0; month = ""; year = ""; seperator = "";
        }

        if (err == 0) {
            DateField.value = month + seperator + year;
            if (DateField.value == "") {
                DateField.focus();
                // HOPTD ADDED
                return false;
                //////////////
            }
        }
        /* Error-message if err != 0 */
        else {
            DateField.value = "";
            DateField.focus();
            // HOPTD ADDED
            return false;
            //////////////
        }
        return true;
    }

    // check định dạng tháng/năm trên lưới
    this.CheckMonthYearInGrid = function (field) {
        var checkstr = "0123456789";
        var DateField = field;
        var Datevalue = "";
        var field = "";
        var DateTemp = "";
        var seperator = "/";
        var month;
        var year;
        var leap = 0;
        var err = 0;
        var i;
        err = 0;
        var Obj = $find(DateField);
        DateValue = Obj.get_value();
        field = Obj.get_value();

        if (DateValue == "") {
            //      new Message().ShowObject(alertmsg_12249)
            return;
        }
        /* Delete all chars except 0..9 */
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;
        /* Always change date to 6 digits - string*/
        /* if year is entered as 2-digit / always assume 20xx */
        if (DateValue.length == 4) {
            DateValue = DateValue.substr(0, 2) + '20' + DateValue.substr(2, 2);
        }

        if (DateValue.length != 6) {
            err = 19;
        }
        /* year is wrong if year = 0000 */
        year = DateValue.substr(2, 4);
        if (year < 1900) {
            err = 20;
        }
        if (year == 0) {
            err = 20;
        }
        /* Validation of month*/
        month = DateValue.substr(0, 2);
        if ((month < 1) || (month > 12)) {
            err = 21;
        }
        /* if 00 ist entered, no error, deleting the entry */
        if ((month == 0) && (year == 00)) {
            err = 0; month = ""; year = ""; seperator = "";
        }
        if (err == 0) {
            Obj.set_value(month + seperator + year);
            if (Obj.get_value() == "") {
                //new Message().ShowObject(alertmsg_10140);
                return false;
            } else {
                /* var valid = new MonthYearChecker().CheckMonthYear(Obj.get_value());
                if (valid == false) {
                new Message().ShowObject(alertmsg_12232);
                }*/

            }
        }

        /* Error-message if err != 0 */
        else {
            Obj.set_value("");
            //new Message().ShowObject(alertmsg_10140);
            return false;
        }
        return true;
    }

    this.CheckMonth = function (field) {
        var checkstr = "0123456789";
        var DateField = field;
        var DateValue = "";
        var DateTemp = "";
        var i;

        DateValue = DateField.value;
        if (DateValue.length == 0) return;
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;

        if (DateValue > 12 || DateValue < 1) {
            return false;
        }
        if (DateValue.length == 1)
            DateValue = '0' + DateValue;
        DateField.value = DateValue;
        return true;
    }

    this.CheckYear = function (field) {
        var checkstr = "0123456789";
        var DateField = field;
        var DateValue = "";
        var DateTemp = "";
        var i;

        DateValue = DateField.value;
        if (DateValue.length == 0) return;
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;

        if (DateValue.length == 2)
            DateValue = "20" + DateValue;

        if ((DateValue.length != 4 && DateValue.length != 0) || DateValue == 0 || DateField.value < 1900) {

            return false;
        }
        DateField.value = DateValue;
        return true;
    }
}
function TimeChecker() {
    /*-- Kiểm tra thời gian trước có lớn hơn thời gian sau hay không*/
    this.TimeInLessThanEqualTimeOut = function (TimeIn, TimeOut) {

        if ((TimeIn == '' || TimeIn == null) && (TimeOut == '' || TimeOut == null)) {
            return true;
        }
        var minute1 = TimeIn.substr(3, 2);
        var hours1 = TimeIn.substr(0, 2);
        var minute2 = TimeOut.substr(3, 2);
        var hours2 = TimeOut.substr(0, 2);

        if (hours1 > hours2) {
            return false;
        }
        else if (hours1 == hours2 && minute1 >= minute2) {
            return false
        }
        else {
            return true;
        }
    }
    /*Kiểm tra giờ nghỉ trưa*/
    this.CheckMinute = function (DateField) {
        var checkstr = "0123456789";
        // var DateTemp = "";
        var i;
        var Obj = $find(DateField);
        /*  for (i = 0; i < Obj.get_value().length; i++) {
        if (checkstr.indexOf(Obj.get_value().substr(i, 1)) >= 0) {
        DateTemp = DateTemp + Obj.get_value().substr(i, 1);
        }
        }
        Obj.set_value(DateTemp);*/
        if ((Obj.get_value() < 0) || (Obj.get_value() >= 1440)) {
            //Obj.set_value("");
            return false;
        }
        else
            return true;
    }
    /*--Kiểm tra nhập định dạng thoi gian hh:mm và kiểm tra giờ nhập vào >=0 và <= 24*/
    this.CheckTime = function (field) {


        var checkstr = "0123456789";
        var DateField = field;
        var Datevalue = "";
        var field = "";
        var DateTemp = "";
        var seperator = ":";
        var hours;
        var minute;
        var leap = 0;
        var err = 0;
        var i;
        err = 0;
        var Obj = $find(DateField);
        DateValue = Obj.get_value().replace(' ', '');
        // alert(DateValue);
        if (DateValue == '' || DateValue == null) {
            //      new Message().ShowObject(alertmsg_12249)
            return 1;
        }
        /* Delete all chars except 0..9 */
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;
        /* Always change date to 6 digits - string*/
        /* if year is entered as 2-digit / always assume 20xx */
        if (DateValue.length == 2) {
            DateValue = DateValue.substr(0, 2) + '00';
            err = 0;
        }
        /* else if (DateValue.length == 3) {
        DateValue = DateValue.substr(0, 2) + '00';
        err = 0;
        }*/
        else if (DateValue.length == 1) {
            DateValue = '0' + DateValue + '00';
            err = 0;
        }
        if (DateValue.length != 4) { //01/2011  00:00
            err = 19;
        }
        minute = DateValue.substr(2, 2);
        hours = DateValue.substr(0, 2);
        /* Validation of hours*/
        if ((hours < 0) || (hours >= 24)) {
            err = 21;
        }
        if (((minute / 60) + hours) >= 24) {
            err = 20;
        }
        /* if (hours == 24 && minute > 0) {
        err = 22
        }*/
        /* if 00 ist entered, no error, deleting the entry */
        /* if ((hours == 0) && (minute == 00)) {
        err = 0; hours = ""; minute = ""; seperator = "";
        }*/
        if (err == 0) {
            Obj.set_value(hours + seperator + minute);
            if (Obj.get_value() == '' || Obj.get_value() == null) {
                return 0;
            } else {
                return 1;
            }
        }

        /* Error-message if err != 0 */
        else if (err == 20 || err == 21) {
            //Obj.set_value("");
            //new Message().ShowObject(alertmsg_10140);
            return -1;
        }
        else {
            // Obj.set_value("");
            return 0;
        }
        return 1;
    }

    /*--Kiểm tra nhập định dạng thoi gian hh:mm và kiểm tra giờ nhập vào >=0 và <= 24 (dùng cho textbox)*/
    this.CheckTimeTextBox = function (field) {


        var checkstr = "0123456789";
        var DateField = field;
        var Datevalue = "";
        var field = "";
        var DateTemp = "";
        var seperator = ":";
        var hours;
        var minute;
        var leap = 0;
        var err = 0;
        var i;
        err = 0;
        DateValue = DateField.value;
        // alert(DateValue);
        if (DateValue == '' || DateValue == null) {
            //      new Message().ShowObject(alertmsg_12249)
            return 1;
        }
        /* Delete all chars except 0..9 */
        for (i = 0; i < DateValue.length; i++) {
            if (checkstr.indexOf(DateValue.substr(i, 1)) >= 0) {
                DateTemp = DateTemp + DateValue.substr(i, 1);
            }
        }
        DateValue = DateTemp;
        /* Always change date to 6 digits - string*/
        /* if year is entered as 2-digit / always assume 20xx */
        if (DateValue.length == 2) {
            DateValue = DateValue.substr(0, 2) + '00';
            err = 0;
        }
        /* else if (DateValue.length == 3) {
        DateValue = DateValue.substr(0, 2) + '00';
        err = 0;
        }*/
        else if (DateValue.length == 1) {
            DateValue = '0' + DateValue + '00';
            err = 0;
        }
        if (DateValue.length != 4) { // 01/2011  00:00
            err = 19;
        }
        minute = DateValue.substr(2, 2);
        hours = DateValue.substr(0, 2);
        /* Validation of hours*/
        if ((hours < 0) || (hours >= 24)) {
            err = 21;
        }
        if (((minute / 60) + hours) >= 24) {
            err = 20;
        }
        /* if (hours == 24 && minute > 0) {
        err = 22
        }*/
        /* if 00 ist entered, no error, deleting the entry */
        /* if ((hours == 0) && (minute == 00)) {
        err = 0; hours = ""; minute = ""; seperator = "";
        }*/
        if (err == 0) {
            DateField.value = hours + seperator + minute;
            if (DateField.value == '' || DateField.value == null) {
                return 0;
            } else {
                return 1;
            }
        }

        /* Error-message if err != 0 */
        else if (err == 20 || err == 21) {
            //Obj.set_value("");
            //new Message().ShowObject(alertmsg_10140);
            return -1;
        }
        else {
            // Obj.set_value("");
            return 0;
        }
        return 1;
    }
}

function NumberChecker() {
    this.checkNumeric = function (field, MaxValue) {

        if (field.value == "")
            return;

        field.value = field.value.replace(',', '.');

        var re;
        re = /,/g;
        var value = field.value.replace(re, '');
        re = /\s+/;
        value = value.replace(re, '');


        if (value == "") {
            field.value = "";
            return;
        }

        if (isNaN(value)) {
            field.value = "";
            field.focus();
            return false;
        }
        //yeu cau 1 so cho phai lon hon 0
        if (value < 0) {
            field.value = "";
            field.focus();
            return false;
        } if (value > MaxValue) {
            field.focus();
            return false;
        }
    }

    this.checkNumericRadTextBox = function (field, MaxValue) {

        var value = "";
        value = field.get_value();
        if (value == "")
            return;

        if (value == "") {
            field.set_value("");
            return;
        }

        if (isNaN(value)) {
            field.set_value("");
            field.focus();
            return false;
        }
        //yeu cau 1 so cho phai lon hon 0
        if (value < 0) {
            field.set_value("");
            field.focus();
            return false;
        } if (value > MaxValue) {
            field.focus();
            return false;
        }
    }
}
///Đối tượng liên quan tới tìm kiếm control
function ControlFinder() {
    ///Lấy danh sách control theo loại
    this.getControlByType = function (type, prefix) {

        var selectedCount = 0;
        var element;
        var arrControl = new Array();
        for (var i = 0; i < document.forms[0].elements.length; i++) {
            element = document.forms[0].elements[i];
            if (element.type == type && element.id.indexOf(prefix) >= 0) {
                arrControl[arrControl.length] = element;
            }
        }
        return arrControl;

    }
    ///Lấy danh sách control theo css class
    this.getControlByCssClass = function (classname, node) {
        if (node == null) node = document.getElementsByTagName("body")[0];
        var arrControls = new Array();
        var els = node.getElementsByTagName("*");
        for (var i = 0, j = els.length; i < j; i++)
            if (els[i].className.toLowerCase() == classname.toLowerCase()) arrControls.push(els[i]);
        return arrControls;

    }
}

//DungN2
//Gán tooltip cho control
function SetToolTip(senderid, tooltipid) {
    this.SetToolTip_OrChart = function (sender, args) {
        var id = sender.get_id();
        var rtt = $find(id.replace(senderid, tooltipid));

        rtt.set_text(sender.get_text());
    }
}

//Kiểm tra khoảng trắng trong chuỗi (Số sổ lao động, MST, Vissa/Passport)
//Chỉ sử dụng cho CustomValidate
function CheckSpace(senderid) {
    this.CheckCustomValidate = function (sender, args) {
        var control = document.getElementById(senderid);
        if (control != null) {
            var value = control.value;
            var i = value.indexOf(" ");
            if (i >= 0)
                args.IsValid = false;
            else
                args.IsValid = true;
        }
        else
            args.IsValid = true;
    }
}

//Sử dụng khi combo được focus vào sẽ show ra dropdown
function ShowDropDown(sender, event) {
    sender.showDropDown();
}